namespace SIMCIntegratedReports
{
    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;
    using Telerik.Reporting;
    using Telerik.Reporting.Drawing;
    using SIMCFachadaNegocio;
    using SIMCObjetoNegocio;
    using System.Collections.Generic;
    using System.Linq;

    /// <summary>
    /// Summary description for rptRendimiento.
    /// </summary>
    public partial class rptRendimiento : Telerik.Reporting.Report
    {
        SIMCFachadaNegocio.FachadaPortafolio fachada;

        public rptRendimiento()
        {
            fachada = new FachadaPortafolio();
            
            InitializeComponent();            
        }

        private void rptRendimiento_NeedDataSource(object sender, EventArgs e)
        {
            int idPortafolio = int.Parse(ReportParameters["Portafolio"].Value.ToString());
            DateTime fechaCorte = DateTime.Parse(ReportParameters["FechaCorte"].Value.ToString());
            DateTime FechaInicial;
            titleTextBox.Value = "Rendimiento del Portafolio al "+fechaCorte.ToString("dd/MM/yyyy");
            
            List<AporteORetiro> t_Movimientos = fachada.BuscarAporteORetiros(idPortafolio, new DateTime(1990,1,1), fechaCorte);

            #region Year To Date
            FechaInicial = fechaCorte.BuscarFechaInicialDelAnno();
            txt01.Value = FechaInicial.ToString("dd/MM/yyyy");
            ResumenAportesYRetiros resumenYTD = fachada.BuscarResumenAportesYRetiros(idPortafolio,FechaInicial , fechaCorte);
            txt11.Value = resumenYTD.NetoInicial.ToString("n");
            txt21.Value = resumenYTD.Ingresos.ToString("n");
            txt31.Value = resumenYTD.Egresos.ToString("n");
            txt41.Value = resumenYTD.NetoFinal.ToString("n");
            txt51.Value = resumenYTD.Utilidad.ToString("n");

            List<AporteORetiro> t_MovimientosYTD = t_Movimientos.Where(p => p.Fecha >= FechaInicial).ToList();

            List<double> listaFlujo = t_MovimientosYTD.FlujoMensual(FechaInicial, fechaCorte, resumenYTD.NetoInicial, -resumenYTD.NetoFinal);
            if (listaFlujo != null)
            {
                try
                {
                    IRR irr = fachada.CalcularIRR(listaFlujo);
                    txt61.Value = irr.TasaTotal.ToString("n") + "%";
                }
                catch (Exception ex)
                {
                    txt61.Value = "0 %";
                }
            }
            else
            {
                txt61.Value = "0 %";
            }



            #endregion

            #region Quarter to date
            FechaInicial =  fechaCorte.BuscarFechaInicialDelTrimestre();
            txt02.Value = FechaInicial.ToString("dd/MM/yyyy");
            ResumenAportesYRetiros resumenQTD = fachada.BuscarResumenAportesYRetiros(idPortafolio, FechaInicial, fechaCorte);
            txt12.Value = resumenQTD.NetoInicial.ToString("n");
            txt22.Value = resumenQTD.Ingresos.ToString("n");
            txt32.Value = resumenQTD.Egresos.ToString("n");
            txt42.Value = resumenQTD.NetoFinal.ToString("n");
            txt52.Value = resumenQTD.Utilidad.ToString("n");

            List<AporteORetiro> t_MovimientosQTD = t_Movimientos.Where(p => p.Fecha >= FechaInicial).ToList();

            listaFlujo = t_MovimientosQTD.FlujoMensual(FechaInicial, fechaCorte, resumenQTD.NetoInicial, -resumenQTD.NetoFinal);
            if (listaFlujo != null)
            {
                try
                {
                    IRR irr = fachada.CalcularIRR(listaFlujo);
                    txt62.Value = irr.TasaTotal.ToString("n") + "%";
                }
                catch (Exception ex)
                {
                    txt62.Value = "0 %";
                }
            }
            else
            {
                txt62.Value = "0 %";
            }
            #endregion

            #region Month to date
            FechaInicial = fechaCorte.BuscarFechaInicialDelMes();
            txt03.Value = FechaInicial.ToString("dd/MM/yyyy");
            ResumenAportesYRetiros resumenMTD = fachada.BuscarResumenAportesYRetiros(idPortafolio, FechaInicial, fechaCorte);
            txt13.Value = resumenMTD.NetoInicial.ToString("n");
            txt23.Value = resumenMTD.Ingresos.ToString("n");
            txt33.Value = resumenMTD.Egresos.ToString("n");
            txt43.Value = resumenMTD.NetoFinal.ToString("n");
            txt53.Value = resumenMTD.Utilidad.ToString("n");

            List<AporteORetiro> t_MovimientosMTD = t_Movimientos.Where(p => p.Fecha >= FechaInicial).ToList();

            listaFlujo = t_MovimientosMTD.FlujoMensual(FechaInicial, fechaCorte, resumenMTD.NetoInicial, -resumenMTD.NetoFinal);
            if (listaFlujo != null)
            {
                try
                {
                    IRR irr = fachada.CalcularIRR(listaFlujo);
                    txt63.Value = irr.TasaTotal.ToString("n") + "%";
                }
                catch (Exception ex)
                {
                    txt63.Value = "0 %";
                }
            }
            else
            {
                txt63.Value = "0 %";
            }
            
            #endregion

            #region Since Inception
            FechaInicial = new DateTime(1999, 1, 1);

            
            ResumenAportesYRetiros resumenInc = fachada.BuscarResumenAportesYRetiros(idPortafolio, FechaInicial, fechaCorte);
            txt14.Value = resumenInc.NetoInicial.ToString("n");
            txt24.Value = resumenInc.Ingresos.ToString("n");
            txt34.Value = resumenInc.Egresos.ToString("n");
            txt44.Value = resumenInc.NetoFinal.ToString("n");
            txt54.Value = resumenInc.Utilidad.ToString("n");

            List<AporteORetiro> t_MovimientosInc = t_Movimientos.Where(p => p.Fecha >= FechaInicial).ToList();

            txt04.Value = t_MovimientosInc[0].Fecha.ToString("dd/MM/yyyy");

            listaFlujo = t_MovimientosInc.FlujoMensual(FechaInicial, fechaCorte, resumenInc.NetoInicial, -resumenInc.NetoFinal);


            if (listaFlujo != null)
            {
                try
                {
                    
                    IRR irr = fachada.CalcularIRR(listaFlujo);
                    txt64.Value = irr.TasaTotal.ToString("n") + "%";
                    if (listaFlujo.Count > 12)
                        txtRendAnual.Value = irr.TasaAnualizada.ToString("n") + "%";
                    else
                    {
                        txtRendAnual.Visible = false;
                        txtEtiquetaRendAnual.Visible = false;
                    }
                }
                catch (Exception ex)
                {
                    txt64.Value = "0 %";
                    if (listaFlujo.Count > 12)
                        txtRendAnual.Value = "0 %";
                    else
                    {
                        txtRendAnual.Visible = false;
                        txtEtiquetaRendAnual.Visible = false;
                    }
                }
            }
            else
            {
                txt64.Value = "0 %";
                txtRendAnual.Visible = false;
                txtEtiquetaRendAnual.Visible = false;
            }
            #endregion


            
        }


       

    }
}